题面传送门:P15930 [TOPC 2021] Aliquot Sum
题目大意
给出一个数,判断这个数的不包括本身的因数和与这个数的大小关系。
思路讲解
注意到本题特殊时间限制为 秒,可直接枚举出读入数的所有因数之和再判断。下面给出求 思路。
枚举 ,可得出 因数中较小一半,可通过计算得出另一半的因数。要将当前数与 与此数之商都加入到 中。
特别地,当前枚举的数的平方等于 时, 只需加入当前数。
特别注意, 时, 值为零。
代码实现
本代码在暴力方法的基础上尽可能优化。
提交记录点此直达。
完整代码
#include<cstdio>using namespace std;int t,n,s;int main(){ scanf("%d",&t); while(t--){ scanf("%d",&n); s=0; for(int i=1;i*i<=n;i++){ if(n==1) break; if(n%i==0){ if(i*i!=n&&i!=1) s+=i+n/i; else s+=i; } } if(s>n) printf("abundant\n"); else if(s<n) printf("deficient\n"); else printf("perfect\n"); } return 0;}













